/**
 * @description 通用的方法
 * @author 大肘子
 */

//解决删除组件后  如果删除的是最后一个 也要适配隐藏的组件

import { ComponentStatetype, compoentInfoType } from "../componentReducer";

export function getNextSelectedId(selectedId: string, componentList: compoentInfoType[]) {
  //收集可见的组件
  const visibleComponentList = componentList.filter((c) => !c.ishidden);
  //找到当前选中的组件在画布组件列表的位置
  const index = visibleComponentList.findIndex((c) => c.fe_id === selectedId);

  //没找到位置
  if (index < 0) return "";
  const length = visibleComponentList.length;
  let newSelectedId = "";
  if (length <= 1) {
    //删除到最后一个
    newSelectedId = "";
  } else {
    //如果删除的是最后一个就把selectedid变成前一个
    if (index + 1 == length) {
      newSelectedId = visibleComponentList[index - 1].fe_id;
    } else {
      newSelectedId = visibleComponentList[index + 1].fe_id;
    }
  }

  return newSelectedId;
}

//插入新的组件
export function insertNewComponent(draft: ComponentStatetype, newComponent: compoentInfoType) {
  const { selectedId, componentList } = draft;
  const index = componentList.findIndex((c) => c.fe_id === selectedId);
  //未选中组件
  if (index < 0) {
    draft.componentList.push(newComponent);
  } else {
    draft.componentList.splice(index, 0, newComponent);
  }
  //设置选中的组件
  draft.selectedId = newComponent.fe_id;
}
